package main

import (
	"fmt"
	"time"
)

/**
 * recover捕获异常
 */
// func set_data(x int) {
// 	defer func() {
// 		// recover() 可以将捕获到的panic信息打印
// 		if err := recover(); err != nil {
// 			fmt.Println(err)
// 		}
// 	}()

// 	// 故意制造数组越界，触发 panic
// 	var arr [10]int
// 	arr[x] = 88
// }

// func main() {
// 	// panic("crash")

// 	set_data(20)

// 	// 如果能执行到这句，说明panic被捕获了
// 	// 后续的程序能继续运行
// 	fmt.Println("everything is ok")
// }

func main() {
	// 这个 defer 并不会执行
	defer fmt.Println("in main")

	go func() {
		defer println("in goroutine")
		panic("error")
	}()

	time.Sleep(2 * time.Second)
}
